import java.util.Scanner;

/**
 * 四、一维数组的应用
 * 1.数组中找最大值和最小值
 * 2.排序
 * 分类：（1）交换类；（2）插入类；（3）选择类
 * 五、数组名是一个数组对象的引用
 *      数组对象的属性：length
 *      数组对象的方法：clone——克隆  只有通过clone的数组，对对象数组操作不改变原数组的数据
 */
public class ArrayADemo {
    public static void main(String[] args){
        int[] a={4,3,7,2,9,1,6};//初始化数组
        //int[] a=new int[7];
        //a[0]=4;a[1]=3;...
        out(a);
        System.out.println("最小值为："+findMin(a));
        System.out.println("最大值为："+findMax(a));
        /*int x;
        System.out.println("请输入要查找的值：");
        Scanner in = new Scanner(System.in);//JDK的类，是固定格式，直接用就行，表示键盘输入
        x=in.nextInt();//你输入值必须是数字
        int p=chazhao(a,x);
        if (p>0){
            System.out.println("该值的下标为："+p);
        }
        else{
            System.out.println("您查找的值不存在");
        }
        System.out.println("排序后的数组为："+); */
        sort4_1(a);//调用sort对数组a排序
        out(a);//输出啊
        //五：
        int[] x={3,6,9};
        int[] b;
        b=x;

        b=x.clone();
        b[1]=99;
        System.out.println(x);
        System.out.println(b);
        out(x);out(b);
    }



    /**
     * 冒泡排序(从小到大)
     * @param a 要排序的数组
     */
    static void sort4(int[] a){
        for (int i=0;i<a.length-1;i++){
            for(int j=0;j<a.length-1-i;j++){
            if(a[j]>a[j+1]) {
                int t;
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
                }
            }
        }
    }
//冒泡排序（从大到小）
static void sort4_1(int[] a){
    for (int i=0;i<a.length-1;i++){
        for(int j=0;j<a.length-1-i;j++){
            if(a[j]<a[j+1]) {
                int t;
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
}

    /**
     * 简单 插入法 排序
     */
    static void sort3(int[] a){
        for (int i=1;i<a.length;i++ ){ //a[i]代表待插入元素
            //数组a[4,3,7,2,9,1,6]下标从0--6，一共7个元素，所有a.length=7,此处i<7
            int j,t=a[i]; //t存储待插入元素
            for (j=i-1;j>=0&&t<a[j];j--){ //若待插入元素小于a[j]
                a[j+1]=a[j];//把a[j]后移一位
            }
            a[j]=t;
        }
    }

    /**
     * 简单 选择法 排序
     * @param a 要排序的数组
     */
    //法一：多次比较找出最小值后一次交换
    static void sort(int[] a){  //数组是个对象，不需要返回值，所以用void
        for (int i=0;i<a.length-1;i++){ //选择次数
            //数组a[4,3,7,2,9,1,6]下标从0--6，一共7个元素，所有a.length-1=6,此处i<6
            int min=i;//假设未排序序列的第一个值是最小的
            for (int j=i+1;j<a.length;j++) {  //比较第i个后面是否有更小的元素
                if (a[j] < a[min])
                    min = j;
            }
            int t;t=a[i];a[i]=a[min];a[min]=t; //把最小元素与未排序序列的第一个元素交换位置
        }
    }
    //法二：多次比较找出最小值后多次交换
    static void sort2(int[] a){
        for (int i=0;i<a.length-1;i++){
            //数组a[4,3,7,2,9,1,6]下标从0--6，一共7个元素，所有a.length-1=6,此处i<6
            for (int j=i+1;j<a.length;j++)
                if (a[i]>a[j]){
                int t;
                t=a[i];a[i]=a[j];a[j]=t;
                }
        }
    }
    // 

    /**
     * 顺序查找
     */
    static int chazhao(int[] a,int x ) {//从数组a中查找x元素
        for (int i = 1; i < a.length; i++) {
            //数组a[4,3,7,2,9,1,6]下标从0--6，一共7个元素，所有a.length=7,此处i<7
            if (a[i] == x) return i;
            }
        return -1;
        }


    /**
     * 从传入的数组中找最小值
     * @param a 要查找的数组
     * @return 找到的最大值
     */
    static int findMax(int[] a){
        int max=a[0];
        for (int i=1;i<a.length;i++){
            if (a[i]>max) max=a[i];
        }
        return max;
    }
    /**
     * 从传入的数组中找最小值
     * @param a 要查找的数组
     * @return 找到的最小值
     */
    static int findMin(int[] a){
        int min=a[0];
        for (int i=1;i<a.length;i++){
            if (a[i]<min) min=a[i];
        }
        return min;
    }

    static void out(int[] a){
        for (int e:a){
            System.out.print(e+"  ");
        }
        System.out.println();
    }
}
